﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO_MechSys;
using BLL_MechSys;

namespace FORMS_MechSys
{
    public partial class frmOrcamento : Form
    {
        #region Variaveis
        DataTable dataTableGridView = new DataTable();
        List<DTOOrdemPendente> ListOrdemPendente = new List<DTOOrdemPendente>();

        DTOCliente dtoCliente = new DTOCliente();
        DTOOrdemPendente dtoOrdemPendente = new DTOOrdemPendente();
        DTOOrdemDetalheServico dtoOrdemDetalheServico = new DTOOrdemDetalheServico();
        DTOOrdemDetalheProduto dtoOrdemDetalheProduto = new DTOOrdemDetalheProduto();
        DTOCor dtoCorPrincipal = new DTOCor();
        DTOCor dtoCorFundo = new DTOCor();
        DTOCor dtoCorLetra = new DTOCor();
        DTOCor dtoCorDataGrid = new DTOCor();

        BLLOrdemPendente bllOrdemPendente = new BLLOrdemPendente();
        BLLCliente bllCliente = new BLLCliente();
        BLLCor bllCor = new BLLCor();




        #endregion

        #region eventos

        #region MouseEnter

        private void btnExcluirServicokkkkkkk(object sender, EventArgs e)
        {
            btnExcluirServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnExcluirServico.ForeColor = Color.Black;

        }

        private void btnEditarServicokkkkkkk(object sender, EventArgs e)
        {
            btnEditarServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnEditarServico.ForeColor = Color.Black;

        }

        private void btnAdiconarServicokkkkkkk(object sender, EventArgs e)
        {
            btnAdiconarServico.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnAdiconarServico.ForeColor = Color.Black;

        }

        private void btnExcluirProdutokkkkkkk(object sender, EventArgs e)
        {
            btnExcluirProduto.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnExcluirProduto.ForeColor = Color.Black;

        }

        private void btnEditarProdutokkkkkkk(object sender, EventArgs e)
        {
            btnEditarProduto.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnEditarProduto.ForeColor = Color.Black;

        }

        private void btnAddProdutokkkkkkk(object sender, EventArgs e)
        {
            btnAddProduto.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnAddProduto.ForeColor = Color.Black;

        }

        private void btnImprimirkkkkkkk(object sender, EventArgs e)
        {
            btnImprimir.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(194)))), ((int)(((byte)(224)))), ((int)(((byte)(255)))));
            btnImprimir.ForeColor = Color.Black;
        }

        #endregion

        #region MouseLeave

        private void btnAddProduto_MouseLeave(object sender, EventArgs e)
        {
            if (btnAddProduto.Enabled)
            {
                btnAddProduto.BackColor = dtoCorPrincipal.Cor;
                btnAddProduto.ForeColor = dtoCorLetra.Cor;
            }

        }

        private void btnEditarProduto_MouseLeave(object sender, EventArgs e)
        {
            if (btnEditarProduto.Enabled)
            {
                btnEditarProduto.BackColor = dtoCorPrincipal.Cor;
                btnEditarProduto.ForeColor = dtoCorLetra.Cor;
            }

        }

        private void btnExcluirProduto_MouseLeave(object sender, EventArgs e)
        {
            if (btnExcluirProduto.Enabled)
            {
                btnExcluirProduto.BackColor = dtoCorPrincipal.Cor;
                btnExcluirProduto.ForeColor = dtoCorLetra.Cor;
            }

        }

        private void btnAdiconarServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnAdiconarServico.Enabled)
            {
                btnAdiconarServico.BackColor = dtoCorPrincipal.Cor;
                btnAdiconarServico.ForeColor = dtoCorLetra.Cor;
            }

        }

        private void btnEditarServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnEditarServico.Enabled)
            {
                btnEditarServico.BackColor = dtoCorPrincipal.Cor;
                btnEditarServico.ForeColor = dtoCorLetra.Cor;
            }

        }

        private void btnExcluirServico_MouseLeave(object sender, EventArgs e)
        {
            if (btnExcluirServico.Enabled)
            {
                btnExcluirServico.BackColor = dtoCorPrincipal.Cor;
                btnExcluirServico.ForeColor = dtoCorLetra.Cor;
            }

        }

        private void btnImprimir_MouseLeave(object sender, EventArgs e)
        {
            if (btnImprimir.Enabled)
            {
                btnImprimir.BackColor = dtoCorPrincipal.Cor;
                btnImprimir.ForeColor = dtoCorLetra.Cor;
            }
        }

        #endregion

        #region Enabled Changed

        private void btnAddProduto_EnabledChanged(object sender, EventArgs e)
        {
            if (btnAddProduto.Enabled)
            {
                btnAddProduto.BackColor = dtoCorPrincipal.Cor;
                btnAddProduto.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnAddProduto.BackColor = dtoCorFundo.Cor;

        }

        private void btnEditarProduto_EnabledChanged(object sender, EventArgs e)
        {
            if (btnEditarProduto.Enabled)
            {
                btnEditarProduto.BackColor = dtoCorPrincipal.Cor;
                btnEditarProduto.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnEditarProduto.BackColor = dtoCorFundo.Cor;

        }

        private void btnExcluirProduto_EnabledChanged(object sender, EventArgs e)
        {
            if (btnExcluirProduto.Enabled)
            {
                btnExcluirProduto.BackColor = dtoCorPrincipal.Cor;
                btnExcluirProduto.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnExcluirProduto.BackColor = dtoCorFundo.Cor;

        }

        private void btnAdiconarServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnAdiconarServico.Enabled)
            {
                btnAdiconarServico.BackColor = dtoCorPrincipal.Cor;
                btnAdiconarServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnAdiconarServico.BackColor = dtoCorFundo.Cor;

        }

        private void btnEditarServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnEditarServico.Enabled)
            {
                btnEditarServico.BackColor = dtoCorPrincipal.Cor;
                btnEditarServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnEditarServico.BackColor = dtoCorFundo.Cor;

        }

        private void btnExcluirServico_EnabledChanged(object sender, EventArgs e)
        {
            if (btnExcluirServico.Enabled)
            {
                btnExcluirServico.BackColor = dtoCorPrincipal.Cor;
                btnExcluirServico.ForeColor = dtoCorLetra.Cor;
            }
            else
                btnExcluirServico.BackColor = dtoCorFundo.Cor;

        }

        #endregion

        #region Grid

        private void dgvProdutos_DataSourceChanged(object sender, EventArgs e)
        {
            if (dgvProdutos.RowCount > 0)
            {
                dgvProdutos.ColumnHeadersVisible = true;
                btnEditarProduto.Enabled = true;
                btnExcluirProduto.Enabled = true;
            }
            else
            {
                dgvProdutos.ColumnHeadersVisible = false;
                btnEditarProduto.Enabled = false;
                btnExcluirProduto.Enabled = false;
            }
        }

        private void dgvServicos_DataSourceChanged(object sender, EventArgs e)
        {
            if (dgvServicos.RowCount > 0)
            {
                btnEditarServico.Enabled = true;
                btnExcluirServico.Enabled = true;
            }
            else
            {
                btnEditarServico.Enabled = false;
                btnExcluirServico.Enabled = false;
            }
        }

        private void dgvProdutos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvProdutos.Rows.Count > 0)
            {
                if (dgvProdutos.CurrentCellAddress.Y != -1)
                {
                    int ordemDetalheProdutoID =
                    Int32.Parse(dgvProdutos["OrdemDetalheProdutoID", dgvProdutos.CurrentCellAddress.Y].Value.ToString());
                    dtoOrdemDetalheProduto = new BLLOrdemDetalheProduto().Buscar(ordemDetalheProdutoID);
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");
            }
        }

        private void dgvServicos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dgvServicos.Rows.Count > 0)
            {
                if (dgvServicos.CurrentCellAddress.Y != -1)
                {
                    int ordemDetalheServicoID =
                    Int32.Parse(dgvServicos["OrdemDetalheServicoID", dgvServicos.CurrentCellAddress.Y].Value.ToString());
                    dtoOrdemDetalheServico = new BLLOrdemDetalheServico().Buscar(ordemDetalheServicoID);
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

            }
        }

        #endregion

        #region Click

        private void toolStripButtonSair_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnBuscarVeiculo_Click(object sender, EventArgs e)
        {
            new frmSelecionarGenerico("Veiculo").ShowDialog();
            txtVeiculoID.Text = BLLUtilitarios.veiculoID.ToString();
            txtVeiculo.Text = BLLUtilitarios.veiculoNome;
            txtveiculoPlaca.Text = BLLUtilitarios.placa;
            dtoCliente = bllCliente.PesquisarDonoVeiculo(BLLUtilitarios.veiculoID);
            txtVeiculoDono.Text = dtoCliente.Nome + " " + dtoCliente.Sobrenome;
        }

        private void btnAddProduto_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            new frmProdutoAdicionar(dtoOrdemPendente.OrdemPendenteID).ShowDialog();
            PopularGridProdutos();
            PopularGridServicos();
            timerCarrosNaOficina.Enabled = false;
        }

        private void btnExcluirProduto_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvProdutos.Focus();
            int index = 0;
            if (dgvProdutos.Rows.Count > 0)
            {
                if (dgvProdutos.CurrentCellAddress.Y != -1)
                {
                    DTOProduto dtoproduto = new DTOProduto();
                    index = dgvProdutos.CurrentCellAddress.Y;
                    dtoproduto.ProdutoID = Int32.Parse(dgvProdutos["ID", index].Value.ToString());
                    dtoproduto.Quantidade = Int32.Parse(dgvProdutos["Quantidade", dgvProdutos.CurrentCellAddress.Y].Value.ToString());
                    new BLLProduto().AlterarQuantidade(dtoproduto);
                    new BLLOrdemDetalheProduto().Excluir(Int32.Parse(dgvProdutos["OrdemDetalheProdutoID", dgvProdutos.CurrentCellAddress.Y].Value.ToString()));
                    PopularGridProdutos();
                    PopularGridServicos();
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

                dgvProdutos.Focus();
            }
            timerCarrosNaOficina.Enabled = false;
        }

        private void btnAdiconarServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            new frmServicoAdicionar(dtoOrdemPendente.OrdemPendenteID).ShowDialog();
            PopularGridProdutos();
            PopularGridServicos();
            timerCarrosNaOficina.Enabled = false;
        }

        private void btnEditarProduto_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvProdutos_CellClick(null, null);
            new frmProdutoAdicionar(dtoOrdemDetalheProduto).ShowDialog();
            PopularGridProdutos();
            PopularGridServicos();

            timerCarrosNaOficina.Enabled = false;

        }

        private void btnEditarServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvServicos_CellClick(null, null);
            if (!dtoOrdemDetalheServico.Status)
            {
                new frmServicoAdicionar(dtoOrdemDetalheServico).ShowDialog();
                PopularGridProdutos();
                PopularGridServicos();
            }
            else
                new frmMessageBox().Show("O serviço já está Concluído e não pode ser Editado.");
            timerCarrosNaOficina.Enabled = false;
        }

        private void btnConcluirServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvServicos_CellClick(null, null);
            dtoOrdemDetalheServico.Status = true;
            new BLLOrdemDetalheServico().Atualizar(dtoOrdemDetalheServico);
            PopularGridProdutos();
            PopularGridServicos();
            new frmMessageBox().Show("Servico Concluído", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
            timerCarrosNaOficina.Enabled = false;
        }

        private void btnExcluirServico_Click(object sender, EventArgs e)
        {
            timerCarrosNaOficina.Enabled = true;
            dgvServicos.Focus();
            if (dgvServicos.Rows.Count > 0)
            {
                if (dgvServicos.CurrentCellAddress.Y != -1)
                {
                    new BLLOrdemDetalheServico().Excluir(Int32.Parse(dgvServicos["OrdemDetalheServicoID", dgvServicos.CurrentCellAddress.Y].Value.ToString()));
                    PopularGridProdutos();
                    PopularGridServicos();
                }
                else
                    new frmMessageBox().Show("Selecione um produto no Grid");

                dgvServicos.Focus();
            }
            timerCarrosNaOficina.Enabled = false;
        }

        #endregion

        #region Outros

        private void timer_Tick(object sender, EventArgs e)
        {
            PopularGridProdutos();
            PopularGridServicos();
        }

        private void frmOrcamento_FormClosed(object sender, FormClosedEventArgs e)
        {
            new BLLOrdemDetalheProduto().ExcluirID0();
            new BLLOrdemDetalheServico().ExcluirID0();
        }

        #endregion

        #endregion

        #region Codigo

        public frmOrcamento()
        {
            InitializeComponent();
            SetColors();
            this.WindowState = FormWindowState.Maximized;
            PopularGridProdutos();
            PopularGridServicos();
        }

        private void SetColors()
        {
            dtoCorPrincipal = bllCor.Buscar("Principal");
            btnImprimir.BackColor = tlpVeiculo.BackColor = btnSair.BackColor = tlpMenuStripRigth.BackColor = 
                lbl1.BackColor = btnEditarServico.BackColor = tlpMenuStripLeft.BackColor =
                btnAddProduto.BackColor = btnBuscarVeiculo.BackColor =
                btnEditarProduto.BackColor = btnExcluirProduto.BackColor =
                tlp_dados.BackColor = tlpDetalhesInterno.BackColor =
                tlpMenuStripCenter.BackColor = btnAdiconarServico.BackColor = btnExcluirServico.BackColor = dtoCorPrincipal.Cor;


            dtoCorFundo = bllCor.Buscar("Fundo");
            tlpMenuStrip.BackColor = 
            tlpPrincipal.BackColor = dtoCorFundo.Cor;

            dtoCorDataGrid = bllCor.Buscar("DataGrid");
            dgvProdutos.BackgroundColor = dgvServicos.BackgroundColor = dtoCorDataGrid.Cor;

            dtoCorLetra = bllCor.Buscar("Letra");
            label2.ForeColor = label3.ForeColor =
               label4.ForeColor = label5.ForeColor = label6.ForeColor = label7.ForeColor =
               lbl1.ForeColor = lbl3.ForeColor = lbl4.ForeColor = lbl5.ForeColor = lbl7.ForeColor = lbl8.ForeColor =
                 btnAddProduto.ForeColor = btnBuscarVeiculo.ForeColor = btnSair.ForeColor =
                btnEditarProduto.ForeColor = btnExcluirProduto.ForeColor =
               btnImprimir.ForeColor = btnAdiconarServico.ForeColor = btnExcluirServico.ForeColor =
               btnEditarServico.ForeColor = dtoCorLetra.Cor;


        }

        public void Limpar()
        {
            txtTotal.Clear();
            txtResumo.Clear();
            txtVeiculo.Clear();
            txtDescricao.Clear();
            txtVeiculoID.Clear();
            txtVeiculoDono.Clear();
            txtveiculoPlaca.Clear();
            gpbVeiculo.Text = "Ordem";
            txtSubTotalProduto.Clear();
            txtSubTotalServicos.Clear();
            txtSubTotalServicos.Clear(); ;
            dgvProdutos.DataSource = null;
            dgvServicos.DataSource = null;
            cmbPrioridade.SelectedIndex = 0;
            dtpDataEntrada.Value = DateTime.Now;
            dtpPrevisaoEntrega.Value = DateTime.Now;
        }

        public void PopularGridProdutos()
        {
            double subTotalServico = 0, subTotalProduto = 0;
            double total = 0;

            dgvProdutos.DataSource = new BLLProduto().BuscarProdutosOrdem(dtoOrdemPendente.OrdemPendenteID);
            if (dgvProdutos.Rows.Count > 0)
            {
                dgvProdutos.Columns[0].Visible = false;
                for (int i = 0; i < dgvProdutos.RowCount; i++)
                    total += double.Parse(dgvProdutos["Total", i].Value.ToString());
            }
            txtSubTotalProduto.Text = string.Format("R$ {0:0.00}", total);
            if (txtSubTotalProduto.Text != "")
                subTotalProduto = double.Parse((txtSubTotalProduto.Text.Replace("R", "").Replace("$", "")).ToString());
            if (txtSubTotalServicos.Text != "")
                subTotalServico = double.Parse((txtSubTotalServicos.Text.Replace("R", "").Replace("$", "")).ToString());
            txtTotal.Text = string.Format("R$ {0:0.00}", subTotalProduto + subTotalServico);

        }

        public void PopularGridServicos()
        {
            double subTotalServico = 0, subTotalProduto = 0;
            double total = 0;

            dgvServicos.DataSource = new BLLServico().BuscarServicosOrdem(dtoOrdemPendente.OrdemPendenteID);
            if (dgvServicos.Rows.Count > 0)
            {
                dgvServicos.Columns[0].Visible = false;
                for (int i = 0; i < dgvServicos.RowCount; i++)
                {
                    total += double.Parse(dgvServicos["Valor", i].Value.ToString());
                }
            }
            txtSubTotalServicos.Text = string.Format("R$ {0:0.00}", total);
            if (txtSubTotalProduto.Text != "")
                subTotalProduto = double.Parse((txtSubTotalProduto.Text.Replace("R", "").Replace("$", "")).ToString());
            if (txtSubTotalServicos.Text != "")
                subTotalServico = double.Parse((txtSubTotalServicos.Text.Replace("R", "").Replace("$", "")).ToString());
            txtTotal.Text = string.Format("R$ {0:0.00}", subTotalProduto + subTotalServico);

        }

        #endregion
    }
}
